/*
 * TinyXMLDocument.h
 *
 *  Created on: 2010-3-25
 *      Author: wenjian
 */

#ifndef TINYXMLDOCUMENT_H_
#define TINYXMLDOCUMENT_H_

#include <vector>
#include "tinyxml/tinyxml.h"
#include "XMLDocument.h"

namespace Try {

  class TinyXMLDocument: public Try::XMLDocument {
    public:
      TinyXMLDocument();
      //TinyXMLDocument(const char* filename);
      virtual ~TinyXMLDocument();

      /**
       * 保存为文件, 当前只支持UTF-8编码格式
       */
      virtual bool save(const char* filename, Encoding encoding=UTF8) ;

      /**
       * 输出为字符串, 当前只支持UTF-8编码格式
       */
      virtual const char* toXML(XMLDocument::Encoding encoding) ;

      /**
       * 从xml串生成xml文档
       */
      virtual bool loadXML(const char* xml);

      /**
       * 从文件载入XML文档
       */
      virtual bool loadFile(const char* filename);

    private:
      //TiXmlDocument tidoc;
      /**
       * 构建TiXmlDocument文档
       */
       void completeTiXmlDocument(TiXmlDocument& tidoc, XMLDocument::Encoding encoding);

       /**
        * 递归构建TiXmlElement节点
        */
       void buildTiXmlElement(TiXmlElement* tinode, XMLElement* node);

       /**
        * 递归解析TiXmlElement节点
        */
       void parse(TiXmlElement* tinode, XMLElement* node);
  };

}

#endif /* TINYXMLDOCUMENT_H_ */
